وبلاگ تخصصی کامپیوتر می توانید سوالات کامپیوتری خود را مطرح کنید
|
تاریخچه[ویرایش]پیش از ظهور اولین ماشین که به پردازندههای امروزی شباهت داشت؛ کامپوترهای مثل انیاک(انیاک) مجبور بودند برای اینکه کارهای مختلفی را انجام دهند دوباره سیم کشی شوند.این ماشین ها کامپیوتر هایی با برنامه ثابت نامیده می شوند. از آنجای که عبارت پردازنده عموما برای دستگاه هایی که برنامه های کامپیوتری را اجرا می کنند به کار می رود ، می توان کامپیوتر های برنامه ذخیره شده (stored-program computer) را به عنوان اولین پردازنده ها نام برد. ایده کامپیوتر های برنامه ذخیره شده در طراحی J. Presper Eckert و John William برای کامپیوتر اینیاک ارائه شده بود ، ولی خیلی زود از طرح حذف گشت تا طرح سریع به اتمام برسد . در 30 ژوئن 1945 قبل از اینکه اینیاک ساخته شود ، ریاضی دانی به نام John von Neumann یک مقاله با عنوان اولین پیش نویس گزارش EDVAC منتشر کرد. که این طرح کلی از اولین کامپیوتر برنامه ذخیره شده بود که سرانجام در آگوست 1949 به اتمام رسید . EDVAC برای انجام تعداد خاصی از دستورالعمل ها طراحی شده بود. این دستورالعمل ها می توانستند ترکیب شوند و برنامه های مفیدی را روی EDVAC اجرا کنند. روشن است که برنامه هایی که برای EDVAC نوشته شده بودن روی حافظه ی سریع کامپیوتر ذخیره می شدند به جای سیم کشی کردن مشخص کامپیوتر . طراحی von Neumann بر این محدودیت اینیاک ، که زمان و تلاش زیاد برای پیکربندی مجدد برای انجام کار جدید بود غلبه کرد . برنامه یا نرم افزار ی که بر روی EDVAC اجرا می شد می توانست به راحتی محتویات حافظه را تغییر دهد. در ابتدا CPU ها به صورت اختصاصی به عنوان بخشی از یک دستگاه بزرگتر طراحی می شدند که گاهی بخشی از یک رایانه بودند. با این حال این روش سفارشی طراحی برای یک کاربرد خاص ، راه را برای تولید انبوه پردازنده های ساخته شده نا هموار می کرد. استاندارد سازی پردازنده ها با پیدایش ترانزیستور ها و میکرو کامپیوتر ها شروع شد و با ظهور آی سی ها شتاب بیشتری گرفت. آی سی ها این اجازه را می دادند که CPU های پیچیده تر و با قواعد طراحی نانو متر تولید شوند . استانداردسازی و کوچک شدن CPU ها هر دو باعث افزایش حضور دستگاه های دیجیتال در زندگی مدرن در مقابل کاربرد محاسباتی خاص شدند. ریز پردازنده ها در هر جایی از ماشین ها تا تلفن های همراه و اسباب بازی های کودکان حضور دارند. هرچند von Neumann به خاطر طراحی EDVAC خود شناخته شده است ، قبل از او افرادی مانند Konrad Zuse ایده های مشابهی را مطرح و پیاده سازی نموده بودند. اصطلاح معماری هاروارد Harvard Mark که یک طراحی برنامه ذخیره شده که از نوار کاغذ های منگنه بجای حافظه های الکترونیکی استفاده می کرد ،قبل از EDVAC تمام شده بود. تفاوت اصلی بین طراحی ون و معماری هاروارد فضای مشترک برای ذخیره دستورالعمل ها و داده ها در مقابل فضا های جدا گانه طراحی هاروارد بود. اغلب CPU های مدرن از طراحی ون پیروی می کنند ، اما المان هایی هم وجود دارند که معماری هاروارد پیروی می کنند. رله ها و لامپ های خلا که عموما به عنوان عناصر سوئیچینگ مورد استفاده قرار می گرفتند. یک کامپیوتر مفید به هزاران یا صدها هزار از این المان های سوئیچینگ نیاز دارد و سرعت کلی سیستم به سرعت این سوئیچ ها وابسطه است. کامپیوتر های لامپ خلا نزیر EDVAC تقریبا 8 ساعت بدون خرابی کار می کردند در حالی که کامپیوتر های رله ای مانند طراحی هاروارد خیلی زودتر با مشکل مواجه می شدند. در نهایت CPU های بر پایه لامپ خلا به دلیل سرعت قابل توجه و قابلیت اطمینان بیشتر بر هم نوعان خود پیروز شدند . اغلب CPU های سنکرون نسبت به CPUهای مدرن با فرکانس کلاک کمتری در حد 100Hz تا 4 MHz کار می کردند که این محدودیت به دلیل سرعت کم المان های سوئیچ بود.
ترانزیستورهای گسسته و مدارات مجتمع (واحد پردازش مرکزی) [ویرایش]پیچیدگی طراحی پرداندهها همزمان با افزایش سریع فن آوریهای متنوع که ساختارهای کوچکتر و قابل اطمینان تری را در وسایل الکترونیک باعث میشد، افزایش یافت. اولین موفقیت با ظهور اولین ترانزیستورها حاصل شد. پردازندههای ترانزیستوری در طول دهههای ۵۰ و ۶۰ میلادی زمان زیادی نبود که اختراع شده بود و این در حالی بود که آنها بسیار حجیم، غیر قابل اعتماد و دارای المانهای سوئیچینگ شکننده مانند لامپهای خلا و رلههای الکتریکی بودند. با چنین پیشرفتی پردازندههایی با پیچیدگی و قابلیت اعتماد بیشتری بر روی یک یا چندین برد مدار چاپی که شامل قسمتهای تفکیک شده بودند ساخته شدند. ریزپردازندهها [ویرایش]
عملکرد ریزپردازندهها [ویرایش]کارکرد بنیادی بیشتر ریزپردازندهها علیرغم شکل فیزیکی که دارند، اجرای ترتیبی برنامههای ذخیره شده را موجب میشود. بحث در این مقوله نتیجه پیروی از قانون رایج نیومن را به همراه خواهد داشت. برنامه توسط یک سری از اعداد که در بخشی از حافظه ذخیره شدهاند نمایش داده میشود. چهار مرحله که تقریباً تمامی ریزپردازندههایی که از [ قانون فون نیومن] در ساختارشان استفاده میکنند از آن پیروی میکنند عبارتاند از: فراخوانی، رمزگشایی، اجرا، بازگشت برای نوشتن مجدد. طراحی و اجرا [ویرایش]مفهوم اساسی یک سی پی یو به صورت زیر است: در طراحی یک سی پی یو یک لیست از عملیات بنام مجموعهٔ دستوری بصورت ذاتی وجود دارد که سی پی یو آنها را انجام میدهد. چنین عملیاتی ممکن است شامل جمع کردن یا تفریق کردن دو عدد، مقایسهٔ اعداد یا پرش به بخشی دیگر از یک برنامه باشد. هرکدام از این عملیات پایهای توسط توالی خاصی از بیتها نمایش داده میشود که این توالی برای چنین عملیات خاصی اپکد نام دارد. فرستادن یک اپکد خاص به یک سی پی یو باعث میشود تا سی پی یو عملی را که توسط اپکد مذکور نمایش داده میشود انجام دهد. برای اجرای یک دستور در یک برنامهٔ کامپیوتری، سی پی یو از اپکد دستور مذکور و نیز نشانوندهای آن (برای مثال، در مورد یک عمل جمع، دو عددی که قرار است با همجمع شوند.) استفاده میکند. عمل ریاضی واقعی برای هر دستور توسط یک زیرواحد از سی پی یو به نام واحد محاسبه و منطق (ALU)انجام میگیرد. یک سی پی یو علاوه بر اینکه از ALU خودش برای انجام اعمال استفاده میکند، اعمال دیگری نظیر: خواندن دستور بعدی از حافظه، خواندن اطلاعات مشخص شده بصورت نشانوند از حافظه و نوشتن یافتههای حاصل در حافظه را نیز به عهده دارد. در بسیاری از طراحیهای سی پی یو، یک مجموعهٔ دستوری مشخصا بین اعمالی که اطلاعات را از حافظه بارگیری میکنند و اعمال ریاضی افتراق میدهد. در این مورد اطلاعات بارگیری شده از حافظه در رجیسترها ذخیره میشود و یک عمل ریاضیاتی هیچ گونه نشانوندی نمیگیرد بلکه بسادگی عمل محاسباتی مذکور را روی اطلاعات موجود در رجیسترها انجام داده و آن را در یک رجیستر جدید مینویسد. دامنه صحیح [ویرایش]روشی که یک پردازنده از طریق آن اعداد را نمایش میدهد یک روش انتخابی در طراحی است که البته در بسیاری از راههای اصولی اثر گذار است. در برخی از کامپیوترهای دیجیتالی اخیر از یک مدل الکترونیکی بر پایه سیستم شمارش دسیمال (مبنای ده) برای نمایش اعداد استفاده شدهاست. برخی دیگر از کامپیوترها از یک سیستم نامتعارف شمارشی مانند سیستم سه تایی(مبنای سه) استفاده میکنند. در حال حاضر تمامی پردازندههای پیشرفته اعداد را به صورت دودویی (مبنای دو) نمایش میدهند که در آن هر عدد به وسیله چندین کمیت فیزیکی دو ارزشی مانند ولتاژ بالا و پایین نمایش داده میشوند.
علت نمایش دهی از طریق اعداد حجم کم و دقت بالا در اعدادی است که پردازشگر میتواند نمایش دهد. در حالت دودویی پردازندهها، یک بیت به یک مکان مشخص در پردازنده اطلاق میشود که پردازنده با آن به صورت مستقیم در ارتباط است. ارزش بیت (مکانهای شمارشی) یک پردازنده که برای نمایش اعداد بکار برده میشود «بزرگی کلمه»، «پهنای بیت»، «پهنای گذرگاه اطلاعات» و یا «رقم صحیح» نامیده میشود. که البته این اعداد گاهی در بین بخشهای مختلف پردازندههای کاملاً یکسان نیز متفاوت است. برای مثال یک پردازنده ۸ بیتی به محدودهای از اعداد دسترسی دارد که میتواند با هشت رقم دودویی (هر رقم دو مقدار میتواند داشته باشد) ۲ یا ۲۵۶ عدد گسسته نمایش داده شود. نتیجاتا مقدار صحیح اعداد باعث میشود که سختافزار در محدودهای از اعداد صحیح که قابل اجرا برای نرمافزار باشد محدود شود و بدین وسیله توسط پردازنده مورد بهره برداری قرار گیرد. پالس ساعت [ویرایش]اکثر پردازندهها و در حقیقت اکثر دستگاههایی که با منطق پالسی و تناوبی کار میکنند به صورت طبیعی باید سنکرون یا همزمان باشند. این بدان معناست که آنها به منظور همزمان سازی سیگنالها طراحی و ساخته شدهاند. این سیگنالها به عنوان سیگنال ساعت(پالس ساعت) شناخته میشوند و معمولاً به صورت یک موج مربعی پریودیک (متناوب) میباشند. برای محاسبه بیشترین زمانی که سیگنال قادر به حرکت از قسمتهای مختلف مداری پردازندهاست، طراحان یک دوره تناوب مناسب برای پالس ساعت انتخاب میکنند. این دوره تناوب باید از مقدار زمانی که برای حرکت سیگنال یا انتشار سیگنال در بدترین شرایط ممکن صرف میشود بیشتر باشد. برای تنظیم دوره تناوب باید پردازندهها باید مطابق حساسیت به لبههای پایین رونده یا بالا رونده حرکت سیگنال در بدترین شرایط تاخیر طراحی و ساخته شوند. در واقع این حالت هم از چشم انداز طراحی و هم از نظر میزان اجزای تشکیل دهنده یک مزیت ویژه در ساده سازی پردازندهها محسوب میشود. اگرچه معایبی نیز دارد، از جمله اینکه پردازنده باید منتظر المانهای کندتر بماند، حتی اگر قسمتهایی از آن سریع عمل کنند. این محدودیت به مقدار زیادی توسط روشهای گوناگون افزایش قدرت موازی سازی (انجام کارها به صورت همزمان) پردازندهها قابل جبران است. موازی گرایی (پاراللیسم) [ویرایش]توصیفی که از عملکرد پایهای یک سی پی یو در بخش قبلی شد، ساده ترین فرمی است که یک سی پی یو میتواند داشته باشد. این نوع از سی پی یو که معمولا آن را ساب اسکیلر مینامند، یک دستور را روی یک یا دو جزو اطلاعاتی، در یک زمان اجرا میکند. این فرایند موجب یک ناکارامدی ذاتی در سی پی یوهای ساب اسکیلر میشود. از آنجایی که فقط یک دستور در یک زمان اجرا میشود، کل سی پی یو باید منتظر بماند تا آن دستور کامل شود تا بتواند به دستور بعدی برود. در نتیجه سی پی یوهای ساب اسکیلر در موارد دستوری که بیش از یک پالس ساعت (چرخهٔ ساعتی) برای اجرا شدن کامل طول میکشند، معلق میماند. حتی اضافه کردن یک واحد اجرایی دیگر بهبود زیادی روی عملکرد ندارد، و در این حالت به جای اینکه یک مسیر معلق باشد، دو مسیر معلق میماند و تعداد ترانزیستورهای بلااستفاده افزایش مییابد. این طراحی، که در آن منابع اجرایی سی پی یو میتواند فقط یک دستور در یک زمان اجرا کند، قادر خواهد بود تا فقط احتمالا به عملکردی در حد اسکیلر (یک دستور در یک clock) برسد. با این وجود عملکرد آن تقریبا همیشه ساب اسکیلر (کمتر از یک دستور در یک چرخه)است. تلاش برای رسیدن به عملکردی در حد اسکیلر و یا بهتر از آن منجر به طیفی از روشهای طراحی شد که باعث میشود تا سی پی یو کمتر بصورت خطی و بیشتر به صورت موازی عمل کند. در هنگام استفاده از ترم پاراللیسم برای سی پی یوها، دو اصطلاح بطور کلی برای طبقه بندی این تکنیکهای طراحی استفاده میشود. پاراللیسم در سطح دستوری (ILP) که هدف آن افزایش سرعت اجرای دستورات در داخل یک سی پی یو است (یا به عبارتی افزایش استفاده از منابع اجرایی روی همان چیپ (on-die))، و پاراللیسم در سطح thread که هدف آن افزایش تعداد threadهایی است (بطور موثر برنامههای جداگانه) که یک سی پی یو میتواند بطور همزمان اجرا کند. هر روش با روش دیگر از نظر نحوهٔ اجرا و نیز تاثیر نسبی آنها در افزایش عملکرد سی پی یو برای یک برنامه متفاوت است. پاراللیسم در سطح دستوری [ویرایش]یکی از ساده ترین شیوههای مورد استفاده برای انجام افزایش پاراللیسم این است که اولین مراحل fetching و decoding دستوری را پیش از اینکه اجرای دستور قبلی تمام شود، شروع کنیم. این روش ساده ترین فرم یک تکنیک بنام instruction pipelining است و در تقریبا تمام سی پی یوهای عمومی جدید استفاده میشود. پایپ لاینینگ، با شکستن مسیر دستوری و تبدیل ان به مراحل جداگانه، باعث میشود تا در هر زمان بیش از یک دستور اجرا شود. این جدا کردن را میتوان با خط مونتاژ مقایسه کرد که در آن یک دستور در هر مرحله کاملتر میشود تا اینکه کامل شود. با این وجود pipelining ممکن است موقعیتی را بوجود آورد که در آن یافتههای عمل قبلی برای کامل کردن عمل بعدی لازم است. این وضعیت را معمولا آشفتگی ناشی از وابستگی مینامند. برای جلوگیری از این وضعیت، باید توجه بیشتری شود تا در صورت رخ دادن این شرایط بخشی از خط تولید دستوری را به تاخیر اندازیم. بطور طبیعی براورده کردن این شرایط نیازمند مدارهایی اضافهاست، بنابراین پردازندههای pipelined پیچیده تر از انواع ساب اسکیلر هستند (البته نه خیلی چشمگیر). یک پردازندهٔ pipelined میتواند بسیار نزدیک به حد اسکیلر شود، در این شرایط تنها مانع موجود stallها (دستوری که بیش از یک چرخهٔ ساعتی در یک مرحله طول میکشد) هستند. ارتقاء بیشتر در مورد ایدهٔ instruction pipelining منجر به ایجاد روشی شدهاست که زمان خالی اجزای سی پی یو را حتی به میزان بیشتری کاهش میدهد. طراحیهایی که گفته میشود سوپراسکیلر هستند شامل یک خط ایجاد(pipeline) دستور طولانی و واحدهای اجرایی مشابه متعدد هستند. در یک خط ایجاد سوپرسکیلر دستورهای متعددی خوانده شده و به dispatcher (توزیع گر) میروند، توزیع گر تصمیم میگیرد که آیا دستورات مذکور میتوانند بطور موازی (همزمان) اجرا شوند یا نه. در صورتی که پاسخ مثبت باشد، دستورات مذکور به واحدهای اجرایی موجود ارسال (dispatch) میشوند. این کار باعث میشود تا چندین دستور به طور همزمان اجرا شوند. به طور کلی هرقدر یک سی پی یوی سوپرسکیلر بتواند دستورات بیشتری را بطور همزمان به واحدهای اجرایی در حال انتظار ارسال (dispatch) کند، دستورات بیشتری در یک سیکل مشخص اجرا میشوند. بیشترین دشواری در طراحی یک معماری سوپرسکیلر سی پی یو مربوط به ساخت یک dispatcher موثر است. دیسپچر باید قادر باشد تا به سرعت و بدون اشتباه مشخص کند که آیا دستورات میتوانند بطور موازی اجرا شوند و آنها را به شیوهای ارسال (dispatch) کند تا بیشترین واحدهای اجرایی ممکن را از بیکاری خارج کند. این امر نیازمند این است که خط ایجاد دستوری حداکثر اوقات ممکن پر باشد و معماریهای سوپرسکیلر را نیازمند مقادیر چشمگیری از کش سی پی یو(cache) میکند. همچنین در این شرایط تکنیکهای پیشگیری از خطرینظیر پیش بینی شاخهای (branch prediction)، اجرای حدسی (speculative execution) و اجرای خارج از نوبت (out of order execution) برای حفظ سطوح بالای عملکرد ضروری هستند. با تلاش برای پیش بینی اینکه یک دستور شرطی کدام شاخه (یا مسیر) را انتخاب میکند، سی پی یو میتواند تعداد زمانهایی را که تمام خط تولید (pipeline) باید منتظر بماند تا یک دستور شرطی کامل شود به حداقل برساند. اجرای حدسی با اجرای بخشهایی از کد که ممکن است بعد از کامل شدن یک عمل شرطی نیاز نباشند، معمولا موجب افزایش متوسط عملکرد میشود. اجرای خارج از نوبت ترتیبی را که دستورات اجرا میشوند تا حدی دوباره چینی میکند تا تاخیر ناشی از وابستگی اطلاعات را کاهش دهد. همچنین در موارد یک دستور -چند دیتا (Single Instructions Multiple Data) - زمانیکه اطلاعات زیادی از یک نوع باید پردازش شود، پردازندههای جدید میتوانند بخشهایی از خط ایجاد مذکور را غیر فعال کنند، در این حالت زمانیکه یک دستور چند بار اجرا میشود، سی پی یو میتواند از فازهای fetch و decode صرفه نظر کند و بنابراین در موقعیتهای خاصی (خصوصا در موتورهای برنامهای بسیار مونوتون نظیر نرم افزار ایجاد ویدیو و پردازش عکس) به میزان زیادی عملکرد افزایش مییابد. در مواردی که فقط بخشی از سی پی یو سوپرسکیلر است، بخشی که سوپرسکیلر نیست دچار جبران عملکردی ناشی از وقفههای زمانبندی میشود. Intel P5 Pentium (اینتل پنتیوم ۵)دو تا واحد محاسبه و منطق (ALU) سوپرسکیلر داشت که میتوانست یک دستور را به ازای یک clock بپذیرد اما FPUی آن نمیتوانست یک دستور را به ازای یک clock بپذیرد. بنابراین P5 سوپرسکیلر از نوع integer است< نظرات شما عزیزان: |
|
کلیه حقوق این وبلاگ متعلق به شرکت نوین رایانه می باشد |